home *** CD-ROM | disk | FTP | other *** search
/ Maclife 157 / MACLIFE157-2001-09.ISO.7z / MACLIFE157-2001-09.ISO / Linux / MacOS Tools / BootX 1.2.2 / Sources / src / miboot / miBoot_boot4.c < prev    next >
C/C++ Source or Header  |  2001-07-23  |  2KB  |  114 lines

  1. #include <Types.h>
  2. #include <Memory.h>
  3. #include <Errors.h>
  4. #include <Files.h>
  5. #include <Devices.h>
  6. #include <TextUtils.h>
  7. #include <LowMem.h>
  8. #include <a4Stuff.h>
  9. #include <Resources.h>
  10.  
  11. #include "uLibc.h"
  12. #include "debug_text.h"
  13. #include "nr_wrapper.h"
  14. #include "zlib.h"
  15. #include "elf_loader_defs.h"
  16. #include "extract_dev_tree.h"
  17. #include "bootx.h"
  18. #include "LowLevelBoot.h"
  19. #include "rs6000.h"
  20. #include "boot.h"
  21.  
  22. #define DEBUG    0
  23.  
  24. /* Globals */
  25. dt_context*    dct = NULL;
  26. UInt32 g_page_size = 4096;
  27. Boolean g_arch_PCI = true;
  28.  
  29. #define KERNEL_ELF        0x01
  30. #define KERNEL_XCOFF    0x02
  31. #define KERNEL_GZIPPED    0x04
  32.  
  33. static check_one_key(KeyMap map, UInt8 key_code)
  34. {
  35.     return ((((UInt8 *)map)[key_code >> 3] >> (key_code & 7)) & 1);
  36. }
  37.  
  38. static Boolean
  39. check_shift_key(void)
  40. {
  41.     KeyMap    keys;
  42.     
  43.     GetKeys(keys);
  44.     return (check_one_key(keys, 0x38));
  45. }
  46.  
  47. /* Todo: This file is no longer needed. */
  48. void main(dt_context *input_context, Boolean no_video)
  49. {
  50.     Ptr                    k;
  51.     UInt32                 ks;
  52.     Handle                 cmd;
  53.         int        flags;
  54.         UInt8    *rd, *kern;
  55.         UInt32    rds;
  56. static    boot_file_t            kfile;
  57. static    boot_file_t            rfile;
  58. static    boot_kernel_desc_t    kdesc;
  59. static    boot_ramdisk_desc_t    rdesc;
  60. static    boot_params_t        params;
  61. static    Boolean                has_rd;
  62.     
  63.     EnterCodeResource();
  64.  
  65.     dct = input_context;
  66.     dt_printf(dct, "¥nLow-level entry...¥n");
  67.     
  68.     dt_printf(dct, "Initialize Name Registry wrappers...¥n");
  69.     g_arch_PCI = (init_nr_wrappers() == noErr);
  70.  
  71.     dt_printf(dct, "Loading kernel...¥n");
  72.     memset(&kfile, 0, sizeof(kfile));
  73.     memset(&rfile, 0, sizeof(rfile));
  74.     memset(&kdesc, 0, sizeof(kdesc));
  75.     memset(&rdesc, 0, sizeof(rdesc));
  76.     memset(¶ms, 0, sizeof(params));
  77.     GetIndString(kfile.spec.name, 128, 1);
  78.     GetIndString(rfile.spec.name, 129, 1);
  79.     kfile.rn = rfile.rn = -1;
  80.     kfile.name = kfile.spec.name;
  81.     rfile.name = rfile.spec.name;
  82.     kfile.spec.vRefNum = rfile.spec.vRefNum = -1;
  83.     kfile.spec.parID = rfile.spec.parID = 2;
  84.  
  85.     if (!check_kernel_file(&kfile, &kdesc, &rdesc, &has_rd)) {
  86.         dt_printf(dct, "Kernel not found !¥n");
  87.         return;
  88.     }
  89.     if (!has_rd && rfile.spec.name[0])
  90.         has_rd = check_ramdisk_file(&rfile, &rdesc);
  91.  
  92.     /* Check shift again (easier to catch here) */
  93.     no_video = check_shift_key();
  94.  
  95.     cmd = GetResource('CMDL', no_video ? 129 : 128);
  96.     if (cmd) {
  97.         DetachResource(cmd);
  98.         HLock(cmd);
  99.     }
  100.     params.args = *cmd;
  101. //    params.no_relocation = true;
  102.     do_boot(&kdesc, &rdesc, ¶ms);
  103.     if (cmd)
  104.         DisposeHandle(cmd);
  105.  
  106. fail:
  107.     dt_printf(dct, "Exiting...¥n");
  108.     dispose_nr_wrappers();
  109.     
  110.     ExitCodeResource();
  111. }
  112.  
  113.  
  114.